import { getDict } from '@/api/common';

const state = {
  dicts: {}
}
const mutations = {
  SET_DICTS(state, opt) {
    //  添加字段 - 触发响应 - 页面重新渲染
    state.dicts = Object.assign({}, state.dicts);
  }
}
const actions = {
  // 设置name
  async setDicts({ commit }, arr = []) {
    //  循环遍历其中的字段 - 发送请求 - 并生成一个 Promise队列
    let lists = arr.map(async _s => {
      const dicts = state.dicts;
      //  判断该数据是否之前被加载过 - 如果有 就不在进行请求了
      if( Array.isArray( dicts[_s] ) ) {
        return Promise.resolve(dicts[_s]);
      } else {
        dicts[_s] = [];  //  赋值 避免多次加载
        return getDict( _s );
      }
    })

    const res = await Promise.all(lists);
    //  处理数据
    res.map((_s, index) => {
      const dicts = state.dicts;
      const key = arr[ index ];

      //  处理数据
      // 有数据就直接返回即可
      if( dicts[ key ] && dicts[key].length > 0  ) return dicts[key];

      //  处理请求回来的数据
      if(_s.code == 200) {
        dicts[key] = _s.data;
      }

      //  同步缓存数据
      commit('SET_DICTS')
      
      //  返回响应的缓存数据
      return dicts[ key ];
    })
  }
}
export default {
  state,
  mutations,
  actions
}
